package com.hy.config;

import com.hy.constans.HttpStatus;
import com.hy.domain.dto.R;
import com.hy.exception.BusinessException;
import com.hy.exception.SystemException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

import java.util.HashMap;
import java.util.Map;


@RestControllerAdvice // 为控制器做增强（AOP）
@Slf4j
public class AppExceptionAdvice {

    @ExceptionHandler(SystemException.class) // 异常处理器，处理 SystemException 异常
    public R doSystemException(SystemException e) {
        // 记录日志
        // 发送消息给运维
        // 发送消息给开发人员
        e.printStackTrace();
        return R.fail(e.getCode(), e.getMessage());
    }

    @ExceptionHandler(BusinessException.class) // 异常处理器 处理 BusinessException 异常
    public R<Map> doBusinessException(BusinessException e) {
        e.printStackTrace();
        return R.fail(e.getCode(), e.getMessage());
    }

    @ExceptionHandler(Exception.class) // 异常处理器，处理其他Exception异常
    public R doException(Exception e) {
        // 记录日志
        log.error(e.getMessage());
        e.printStackTrace();
        // 发送消息给运维
        // 发送消息给开发人员
        return R.fail(HttpStatus.ERROR, "未知错误");
    }
}
